package com.dtx.iterator.shushang;

import com.dtx.iterator.gongyongde.Book;
import com.dtx.iterator.gongyongde.Iterator;

/**
 * 接下来看看用于遍历书架的BookShelfIterator类。<br>
 * 因为BookShelfIterator类需要发挥Iterator的作用，所以它实现了Iterator接口。<br>
 * bookShelf字段表示BookShelfIterator所要遍历的书架。index字段表示迭代器当前所指向的书的下标。<br>
 * 构造函数会将接收到的BookShelf的实例保存在bookShelf字段中，并将index初始化为0.<br>
 * hasNext方法是Iterator接口中所声明的方法。该方法将会判断书架中还有没有下一本书，如果有就返回true，如果没有就返回false。<br>
 * 而要直到书架中还有没有下一本书，可以通过比较index和书架中书的总册数(bookShelf.getLength()的返回值)来判断。<br>
 * next方法会返回迭代器当前所指向的书(Book的实例)，并让迭代器指向下一本书。它也是Iterator接口中所声明的方法。next方法稍微有点复杂<br>
 * 它首先取出book变量作为返回值，然后让index指向后面一本书。
 */
public class BookShelfIterator implements Iterator {

    private BookShelf bookShelf;

    private int index;

    public BookShelfIterator(BookShelf bookShelf) {
        this.bookShelf = bookShelf;
        this.index = 0;
    }


    @Override
    public boolean hasNext() {
        if(index<bookShelf.getLength()){
            return true;
        }else {
            return false;
        }
    }

    @Override
    public Object next() {
        Book book = bookShelf.getBookAt(index);
        index++;
        return book;
    }
}
